今天我们也通过通俗易懂的示例,一步步拆解全局 Min-Max、分组 Min-Max、GPTQ、AWQ 四种核心校准算法,剖析其进化逻辑,解释为何分组校准是 INT4 量化的基石,以及 GPTQ/AWQ 高阶优化:GPTQ(最优量化 + 误差补偿)3.1 核心逻辑分组 Min-Max 解决了范围浪费,但仍属于“被动映射”,无论权重重要性如何,都按同一规则量化。 GPTQ 的突破在于主动寻找最优量化值,并通过误差补偿,优先保障重要权重的精度。 最优选择:AWQ(权重均衡 + 分组 Min-Max)4.1 核心逻辑GPTQ 通过最优量化提升精度,但计算复杂;AWQ 则从权重分布入手,先整理权重减少极端值,再做分组 Min-Max,实现精度与效率双优 5.3 应用落地层面:AWQ 是当前最优解全局 Min-Max:仅适合教学演示、快速验证,无生产价值;分组 Min-Max:适合资源极度有限、对精度要求不高的边缘场景,如嵌入式设备;GPTQ:适合学术研究
预量化(GPTQ、AWQ、GGUF) 我们已经探索了分片和量化技术。但是量化是在每次加载模型时进行的,这是非常耗时的操作,有没有办法直接保存量化后的模型,并且在使用时直接加载呢? TheBloke是HuggingFace上的一个用户,它为我们执行了一系列量化操作,我想用过大模型的人一定对它非常的熟悉吧 这些量化模型包含了很多格式GPTQ、GGUF和AWQ,我们来进行介绍 1、GPTQ 3、AWQ: Activation-aware Weight Quantization 除了上面两种以外,一种新格式是AWQ(激活感知权重量化),它是一种类似于GPTQ的量化方法。 AWQ和GPTQ作为方法有几个不同之处,但最重要的是AWQ假设并非所有权重对LLM的性能都同等重要。 也就是说在量化过程中会跳过一小部分权重,这有助于减轻量化损失。 所以他们的论文提到了与GPTQ相比的可以由显著加速,同时保持了相似的,有时甚至更好的性能。 该方法还是比较新的,还没有被采用到GPTQ和GGUF的程度。
1.1.3 GPTQ量化 说到GPTQ,就要说起它的老祖先OBD、OBS、OBC等剪枝算法(否则无法理解GPTQ)。本质上来说,参数剪枝是参数量化的一种特殊情况(把参数直接置为0这个特殊量化值)。 HQQ量化的问题定义在如何在零点量化中取得最优的z和s(零点和缩放倍数)。 一个基于 GPTQ 算法,简单易用且拥有用户友好型接口的大语言模型量化工具包。 这两种格式也是PTQ形式的量化算法,但GGML和GGUF格式的量化算法更适配于CPU推理,因此在CPU上运行更快,而GPTQ量化对GPU更加友好,两者的推理精度相仿。 AWQ 量化与 GPTQ 量化对比 AWQ 量化精度比 GPTQ 高一点,并且 AWQ 比 GPTQ 更容易实现,计算性能更高。
GPTQ 首先通过无损量化步骤,将模型权重表示为一个低精度的基线表示,然后在此基础上应用有损量化来进一步压缩模型,同时通过优化算法最小化量化误差对模型性能的影响。 QuIP# 的量化工具内部实现了复杂的量化算法,包括梯度量化、误差补偿、分层量化等操作。在量化过程中,QuIP# 会自动处理模型中的每一层,并根据层的类型和特性选择合适的量化策略。 在模型性能损失方面,AWQ 的性能损失相对较小,平均在 1 - 2% 左右;GPTQ 的性能损失较大,平均在 5 - 10% 左右;QuIP# 的性能损失介于两者之间,平均在 2 - 3% 左右。 而在量化效率方面,QuIP# 的量化速度最快,AWQ 次之,GPTQ 的量化速度相对较慢。 同时,研究人员可能会开发出更先进的量化算法,进一步减少精度损失并提高量化效率。
,最优化,LKD(layer-by-layer 蒸馏)等各类算法计算其较优解,从而尽可能减少量化引起的精度损失;而最直接的计算scale 和方法即是基于张量元素min/max。 相比于GPTQ从最优化问题出发设计方案,AWQ是基于搜索提出的量化方案。 效果 从模型表现效果方面,通过逐层 scale search 寻找最优的缩放系数,从而取量化误差最小的解,以下来自AWQ paper的效果比较,从Perplexity的角度,显示在两代Llama的测试上其量化结果稍优于 【图片出处:AWQ, p6】 从实际任务的准确率来看,AWQ的准确率与GPTQ的act_order版本(GPTQ-R)相当,而速度优于后者。 【图片出处:AWQ, p5】 从模型的计算性能方面,GPTQ因为有reorder操作,矩阵乘法是MV(matrix×vector),为不连续的内存访问,而AWQ不存在reorder操作,矩阵乘法为(matrix
4.1.1 GPTQ的基本原理 GPTQ基于以下核心思想:通过求解最优权重量化问题,最小化量化引起的均方误差。 具体来说,对于每个权重矩阵的列,GPTQ逐个量化其元素,同时保持其他元素的原始精度。 量化过程中,GPTQ使用贪心算法和符号化的雅可比矩阵来加速优化过程。 print(f"注意:这是简化的GPTQ实现,实际实现需要更复杂的优化和Hessian近似") if __name__ == "__main__": main() 4.2 AWQ量化技术 AWQ - https://github.com/IST-DASLab/gptq AWQ - https://github.com/mit-han-lab/llm-awq SqueezeLLM - https 硬件-算法协同设计:为新型AI硬件定制优化的压缩算法。 自动化压缩工具:开发端到端的自动化压缩工具,降低压缩技术的使用门槛。 多模态压缩:将压缩技术扩展到多模态大语言模型。
(使用AWQ和GPTQ的联合量化,将deepseek-R1的FP8权重转化为INT8类型。) GPTQ二阶优化(全局误差补偿) • 分组量化:将权重矩阵划分为组(如每128列为一组),与AWQ的缩放分组保持一致。 • INT8量化执行:在AWQ缩放后的权重基础上,应用GPTQ校准后的参数完成INT8量化。 混合策略部署 • 配置对齐:保持AWQ与GPTQ的分组方式、位宽(INT8) 一致,确保量化流程无缝兼容。 • 在线量化适配:在推理时复用AWQ的分组缩放策略,并集成GPTQ的反量化参数,实现动态精度补偿。
AWQ感知量化 6x 0.3-0.8% 低端设备 # GPTQ量化实操 python quantize.py \ --model_id "meta-llama/Llama-3-7b" \ - 注意力机制优化 FlashAttention-2算法突破: # 传统Attention计算 QK = torch.matmul(Q, K.transpose(2, 3)) # O(n²)复杂度 attn 金融行业:实时风险分析系统 传统方案:T+1生成报告,延迟>8小时 FastGPT方案: 部署Llama3-13B-AWQ模型 流式处理市场数据 实时生成风险评估 成果: 算法突破 # 动态稀疏注意力(研究代码) class DynamicSparseAttention(nn.Module): def forward(self, Q, K, V): / AWQ | 边缘设备部署 | | 监控系统 | Prometheus+Grafana | 集群性能监控 | | 测试工具 | k6
算法的第一个版本 ---- 把问题抽象一下,其实不管是单元格,表格,还是文本行都可以看成是一个个的元素,于是我们的问题就成了在两个有序的序列中寻找一个最优的匹配,每个元素最多能跟一个元素进行匹配(可以没有匹配 ),如下图: 上图显示的就是左右两个集合中的一种匹配,但是这种匹配的形式跟我们的要求是不符合的。 例如从上图来理解,如果1和6匹配上之后,2则只能和6后面的7或者8进行匹配,所以上图的4这个元素开倒车不符合规则(如果把4和5这两个元素之间的边去掉的话,则是满足条件)。 2.1 算法的目标 我们既然要找到最优的匹配,但是怎么才算是最优呢?这就是要求我们先定义一个数值指标,以此来衡量优劣。这也比较简单,对每条连线的权重求和,以此作为衡量指标。 简单说就是保证每个联通子图的最优来保证全局最优(当然这不一定成立,但是概率很小,而且即使不是全局最优,也和全局最优相差不多了,所以可以忽略)。
开始时,并没有意识到是配对算法本身的效率问题,毕竟这个算法前不久还专门优化过,空耗了大半天的时间。后来实在没辙了,就调戏页面匹配算法,结果还真就是这个算法的问题。 即使我们在算法的第二个进行了相当部分的剪枝,但是只要匹配的元素比较多,计算量还是非常大的,看上去就像是假死了一样。 算法优化版本V3 ---- 既然知道了问题,那就想办法解决。 V3版算法步骤与实现 ---- 找到混乱区域的算法步骤: 计算左边每个元素和右边相邻元素的匹配度(在我们场景中就是字符串的相似得分,基于编辑距离); 选择匹配度最高的作为左边每个元素的临时匹配,这样就会得到一个匹配列表 ,如(1,3,5),这表示左边的第1个元素和右边第1个元素匹配,第2个元素和右边第3个元素匹配,第3个元素和右边第5个元素匹配; 如果匹配列表刚好是按顺序递增的且没有相同的元素,则满足完全配对,直接返回结果 总体上,对这整个算法的设计还是挺满意的,效果也很好,原来算法的时间复杂度应该是指数级的,现在更加接近线性级。
云资源自动优化系统:设计了一个云资源自动优化系统,能够自动选择最优的云资源类型和计费方式,降低云资源使用成本。 3. 根据请求的并发量,动态调整批处理大小,实现资源的最优利用。 GPTQ量化:一种针对LLM的高效量化方法,能够在保持精度的同时提高推理速度。 AWQ量化:一种自适应权重量化方法,能够根据权重分布进行动态量化。 ", quantization="gptq", # 可选:gptq, awq, w8a16, w4a16 gptq_ckpt="TheBloke/vicuna-70B-v1.5-GPTQ /vicuna-7b-v1.5", quantization="gptq", gptq_ckpt="TheBloke/vicuna-7B-v1.5-GPTQ", gptq_safetensors
6. 2025年最新量化技术进展 6.1 GPTQ量化技术 GPTQ(GPT Quantization)是2023年提出的一种高精度后训练量化方法,在2025年已经成为行业标准。 6.1.1 GPTQ核心思想 GPTQ通过最小化量化误差的反向传播影响,为每个权重矩阵选择最优的量化值。其核心是贪心算法,按列优化权重的量化值。 6.1.2 GPTQ实现代码(简化版) def gptq_quantize(weights, bits=4): # 初始化量化权重 quantized_weights = np.zeros_like 6.3.1 AWQ关键步骤 分析每个权重对模型输出的贡献 保留重要权重的更高精度 对不重要权重进行更激进的量化 7. LLM.int8()在保持较高精度的同时提供了接近2倍的速度提升,而AWQ和GPTQ等4位量化方法则可以实现更高的速度提升,但会带来一定的精度损失。
模式匹配算法: 定义一个主串字符串S="goodgoogle",再定义一个模式串字符串T="google",然后依次遍历主串中的字符,判断,模式串是否在主串中存在,这种模式串的定位操作通常称为串的模式匹配 代码: 1 /** 2 * 朴素的模式匹配算法 3 * @author wydream 4 * 5 */ 6 7 public class OrdinaryModel { 22 if(diff<0) { 23 System.out.println("匹配失败"); 24 return; 25 } 26 int index=0; 27 //从str中第一个字符串开始进行匹配,如果str中余下的字符串长度大于searchStr的长度,则继续进行判断 28 36 if((i-index)==bfSearch.length()-1) { 37 System.out.println("匹配成功
摘要:现阶段,基于特征点匹配的算法,如SIFT,SURF等著名匹配算法,都是基于一个尺度空间来进行描述的,那么了解尺度空间是什么将是全面了解特征点匹配的关键性基础知识。 网上基于尺度空间的基础知识有很少的介绍,所以本文将主要介绍尺度空间,使读者在运用基于SIFT等特征匹配算法时,能从最基本的理论上思考问题和解决问题。 通过了解尺度空间,我们可以知道尺度不变性是什么样的概念,那么特征点匹配算法等是怎么利用这种特性来建立鲁棒性强的特征提取算法的,感谢阅读,如有任何疑问请向我们留言,我们下章见!
KM算法 KM算法是在匈牙利算法的基础上衍生,在二分图匹配的问题上增加权重,变成了一个带权二分图匹配问题,求最优的二分图匹配。 KM算法讲解,这篇博客自我感觉很好理解。 二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小。 而二分图的最优匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大或最小。 二分图的带权匹配与最优匹配不等价,也不互相包含。 我们可以使用KM算法实现求二分图的最优匹配。KM算法可以实现为O(N^3)。 KM的几种转化 KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。 KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。 KM算法求得的最大权匹配是边权值和最大,如果我想要边权之积最大,又怎样转化?
链表排序算法总结 概述 问题描述:给定一个链表,请将这个链表升序排列。
问题:给定二个字符串S和T,在主串S中查找子串T的过程称之为字符串匹配问题(string matching,也称之为模式匹配)。 在文本处理系统,操作系统,编译系统,数据库系统以及internet信息检索中,串匹配是使用最频繁操作。 有蛮力法,即BF(暴力匹配算法,和KMP算法。 我只会bf算法,kmp还是有问题。 思路 从主串S开始的一个字符串和子串T的第一个字符串进行比较,若相等,则比较二者的后续字符;若不相等,则主串S的第二个字符和子串T的第一个字符进行比较,重复上述过程,若T中的字符全部匹配完,则说明本次匹配成功 ,若S中字符全部比较完毕,则匹配失败。 return 0; } 结果 time=0.074000 seconds 本次匹配的开始位置:4 Press any key to continue ---- kmp算法。
在本文中,我们将通过使用GPTQ对Mistral 7B、Llama 27b和Llama 13B进行8位、4位、3位和2位量化实验来回答这个问题。 下面我们先对比下目前经常用到的一些量化方法 目前量化方法的测试 我们这里使用GPTQ是因为AWQ虽然更准确能够产生更快的推理模型。但是它最低只能支持到只4位量化。 而AutoGPTQ支持使用GPTQ进行2、3、4和8位量化,为了对比测试,所以我们选择了GPTQ来进行这个测试,下面是量化的代码: from transformers import AutoModelForCausalLM 它很好地说明了今天的4位量化算法还是非常给力的。并且这里我们用的是GPTQ,AWQ会产生更接近8位量化的结果。 在分析1.58位llm的性能时,不仅在生成连贯的文本(以困惑度来衡量)方面,而且在执行诸如问答之类的下游任务方面,1.58位模型不仅匹配甚至超过了等效Llama模型的性能。
下面开始介绍串匹配算法。 暴力匹配 思想是自左而右,以字符为单位,依次移动模式串,直到某个位置发生匹配。 ? 这个算法最好的情况是第一次就比对成功,最好情况的上边界则是每次比对时,第一个字符都不匹配,这样就移动一格,最好情况的复杂度就等于 (Omega(n)) , n为文本的长度。 KMP :模式记忆 暴力匹配算法存在着冗余的问题,当最坏情况时,最后一个字符匹配失败,模式串和文本串的指针都要发生回退。 BM算法 对于BM算法的介绍,我同样推荐看阮一峰老师的BM博客(真心推荐看看),讲的十分清楚。 综合性能 各种模式匹配算法的时间复杂度如下所示: ?
前言 在很多问题上是没有标准解的,我们要找到最优解。 这就用到了遗传算法。 遗传算法是一种通过模拟自然进化过程来解决问题的优化算法。 它在许多领域和场景中都有广泛应用。 以下是一些常见的使用遗传算法的场景: 优化问题:遗传算法可以应用于各种优化问题,如工程设计、物流优化、路径规划、参数调优等。 它可以帮助找到最优或接近最优解,解决复杂的多目标优化问题。 机器学习:遗传算法可以用于机器学习的特征选择和参数调优。 例如,使用遗传算法来选择最佳特征组合,或者通过遗传算法搜索最佳参数配置以提高机器学习算法的性能。 约束满足问题:遗传算法可以用于解决约束满足问题,如布尔满足问题(SAT)、旅行商问题(TSP)等。 它可以搜索解空间,寻找满足所有约束条件的最优解或近似最优解。 从中选择最优的N个染色体继续繁殖,达到设置的繁殖代数后,获取适应度最高的个体。 需要注意的是 繁殖次数内不一定找到最优的解,繁殖的次数越多找到最优解的可能越高。